package mystudy
// 函数模块
import myfmt"fmt"
import "strings"

// 返回值类型有一个，写返回类型
func add(num1 int , num2 int) (int){
	return num1 + num2
}
// 返回值可以不写返回类型，如果只有一个返回类型的话可以不写括号(()
func add2(num1 int, num2 int) int {
	var sum int = 0
	sum = num1 + num2
	return sum
}
func address(num1 *int){
	myfmt.Println(num1)
	*num1 = 100
}
func add3(num1 int, num2 int)(int, int){
	// 值交换
	return num2, num1
}
// 不用指定返回值的类型
func addsub(num1 int, num2 int)(sum int, sub int){
	sum = num1 + num2
	sub = num1 - num2
	return 
}
// 传入多个参数
func mostParams(nums...int){
	for i :=0 ; i< len(nums); i++ {
		myfmt.Println("num=",nums[i])
	}
}
// 函数当作一个参数传递
func funcParams(funcTest func(...int)){
	funcTest(12,12,12)
}
// 自定义数据类型
type myfunc func(int)

func oneIntParams(num int){
	myfmt.Println("test")
}

func DemoFunc(){
	// myfmt.Println("求和函数")
	// sum := add(10, 21)
	// myfmt.Println("求和结果：", sum)
	sum2 := add2(19,22)
	myfmt.Println("求和结果：", sum2)
	var num1 int = 10
	var num2 int = 20
	myfmt.Printf("替换前：sum1:%d, sum2:%d\n", num1, num2)
	num2, num1 = add3(num2, num1)
	myfmt.Printf("替换后：sum1:%d, sum2:%d\n", num1, num2)
	separator := strings.Repeat("-", 10)
	myfmt.Println(separator)
	summ, subb := addsub(100, 60)
	myfmt.Println(summ, subb)
	myfmt.Println(separator)
	mostParams(12,2,3,233,23,32,32)
	varMostParams := mostParams
	myfmt.Println(separator)
	varMostParams(32,23,88)
	myfmt.Println(separator)
	funcParams(varMostParams)
	type myint int 
	var num myint = 10
	myfmt.Println(num)
	type myFunc func(int)
	var testMyFunc myFunc
	testMyFunc = oneIntParams
	testMyFunc(1)

}       